package com.hb.domain;

import com.hb.service.PricingEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

// @Configurable 注解是为非 Spring 容器管理的对象注入依赖，非 Spring 容器管理的对象指的是我们自己 new 出来的对象。
// 原理是 Spring 使用 AspectJ 的 LoadTimeWeaving 技术为我们自己创建的对象进行注入的。
// 如果想要使用 @Configurable 注解需要：
// 1、添加 spring-context，spring-aspects，spring-instrument 这三个模块
// 2、在配置类上使用 @EnableSpringConfigured 和 @EnableLoadTimeWeaving 这两个注解
// 3、配置 JVM 参数 javaagent，指定 agent 的 jar 为 spring-instrument。在 Run/Debug 处的 Server -> VM Options 进行配置
@Configurable("order")
public class Order implements Serializable {
    private static final long serialVersionUID = 1L;
    private Customer customer;
    private List<Pizza> pizzas;
    private Payment payment;

    public Order() {
        pizzas = new ArrayList<Pizza>();
        customer = new Customer();
    }

    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    public List<Pizza> getPizzas() {
        return pizzas;
    }

    public void setPizzas(List<Pizza> pizzas) {
        this.pizzas = pizzas;
    }

    public Payment getPayment() {
        return payment;
    }

    public void setPayment(Payment payment) {
        this.payment = payment;
    }

    public void addPizza(Pizza pizza) {
        pizzas.add(pizza);
    }

    public float getTotal() {
        return 0.0f;
    }

    private PricingEngine pricingEngine;

    @Autowired
    public void setPricingEngine(PricingEngine pricingEngine) {
        this.pricingEngine = pricingEngine;
    }
}
